<?php
// +----------------------------------------------------------------------+
// |                       	     TpvMarket                                |
// +----------------------------------------------------------------------+
// |                	     www.tpvmarket.com                            |
// +----------------------------------------------------------------------+
// |       	     Copyright (c) 2013 Carlos Mora Molina    			      |
// +----------------------------------------------------------------------+
// | Este programa es software libre. Puede distribuirlo  y/o modificarlo |
// | bajo los términos de la  licencia GNU General Public License  tal  y |
// | como la publica la Fundación de Software Libre, bajo la denominación |
// | GPL, en su versión 2 o posterior (versión inglesa).                  |
// |                                                                      |
// | This program is free software. You can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 or later of the GPL.  |
// +----------------------------------------------------------------------+
// | Autores/Authors:                                                     |
// |          Carlos Mora <ozonosp@gmail.com>                             |
// +----------------------------------------------------------------------+
//
// $Id: Exp $

/**
 * Clase de acceso a datos mysql
 */ 
class Datasource {

	var $dbLink;
	private $showSql;

	/**
	 * Constuctor de la conexión
	 * @param string $dbHost
	 * @param string $dbName
	 * @param string $dbuser
	 * @param string $dbpasswd
	 * @param string $codification
	 */
	function Datasource($dbHost, $dbName, $dbuser, $dbpasswd, $codification = 'utf8') {
				
		$this->showSql = false; //Por defecto no se muestra el código sql

		// Change this line to reflect whatever Database system you are using:
		$this->dbLink = mysql_connect ($dbHost, $dbuser, $dbpasswd);

		// Change this line to reflect whatever Database system you are using:
		mysql_select_db ($dbName, $this->dbLink);
		mysql_query ("SET NAMES '$codification'");
	}


	/**
	 * Ejecuta una consulta sql
	 * @param unknown $sql
	 * @return resource
	 */
	function execute($sql) {
				
		if($this->showSql) error_log($sql); //Si le solicitamos que muestre el sql se envian las consultas al error_log
		// Change this line to reflect whatever Database system you are using:
		$result = mysql_query($sql, $this->dbLink);
		$this->checkErrors($sql);

		return $result;
	}


	/**
	 * Ejecuta una consulta sql sin notificar errores
	 * @param unknown $sql
	 * @return resource
	 */
	function executeBlind($sql) {

		if($this->showSql) error_log($sql); //Si le solicitamos que muestre el sql se envian las consultas al error_log
		// Change this line to reflect whatever Database system you are using:
		$result = mysql_query($sql, $this->dbLink);

		return $result;
	}


	/**
	 * Devuelve la siguiente fila de una consulta
	 * @param unknown $result
	 * @return multitype:
	 */
	function nextRow ($result) {

		// Change this line to reflect whatever Database system you are using:
		$row = mysql_fetch_assoc($result);

		return $row;
	}


	/**
	 * Comprueba si se han generado errores en la última consulta
	 * Se llama cada vez que se realiza una consulta con execute
	 * @param unknown $sql
	 */
	function checkErrors($sql) {

		//global $systemLog;

		// Only thing that we need todo is define some variables
		// And ask from RDBMS, if there was some sort of errors.
		$err=mysql_error();
		$errno=mysql_errno();

		if($errno) {
			// SQL Error occurred. This is FATAL error. Error message and 
			// SQL command will be logged and aplication will teminate immediately.
			$message = "The following SQL command ".$sql." caused Database error: ".$err.".";

			//$message = addslashes("SQL-command: ".$sql." error-message: ".$message);
			//$systemLog->writeSystemSqlError ("SQL Error occurred", $errno, $message);

			print "Unrecowerable error has occurred. All data will be logged.";
			print "Please contact System Administrator for help! \n";
			print "<!-- ".$message." -->\n";
			exit;

		} else {
			// Since there was no error, we can safely return to main program.
			return;
		}
	}

		/**
		 * Formatea una cadena para que sea segura en mysql
		 * @param string Cadena de entrada
		 * @return string Escapado
		 */
		function escapeString($string){
			return mysql_real_escape_string($string);
		}

		/**
		 * Activa o desactiva el modo de visualización de sql
		 * Si se activa envía al error_log todas las consultas sql
		 * @param bool Activación o desactivacion
		 */
		function testMode($value){
			$this->showSql = $value;
		}
}

?>